package UDP网络编程;

import org.junit.Test;

import java.io.IOException;
import java.net.*;

public class 广播信息 {
    //发送端
    @Test
    public void sender() throws IOException {
        //1.创建DatagramSocket类实例对象，用作发送端，不用指明具体接收端
        DatagramSocket socket = new DatagramSocket();

        //2.创建DatagramPacket类实例对象，承载需要发送的数据。（发送的是二进制数据）其他数据要提前进行转换成二进制数据的数组，再发送。
        String str = "你好，我是UDL网络编程--发送端"; //创建需要发送的信息，字符数据
        byte[] bytes = str.getBytes();  //创建一个字节数组，用作字符数据转换的存储空间。可以利用getBytes()方法进行转换
        InetAddress inet = InetAddress.getLocalHost();//获取本地电脑的IP地址
        //DatagramPacket类实例对象,会构造一个数据报包，用于将长度为 length且偏移量为 ioffset的数据包发送到指定主机上的指定端口号。 需要指明IP地址以及端口号
        DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, inet, 1111);//必须指明地址接口


        //3.调用send()方法进行发送
        socket.send(packet);
        System.out.println("发送完成！");
        //关闭资源
        socket.close();


    }

    //接收端
    @Test
    public void receiver() throws IOException {
        //1.创建一个DatagramSocket接收端，需要指明端口号
        DatagramSocket socket = new DatagramSocket(1111);

        //2.创建一个DatagramPacket,用来接收数据
        byte[] bytes = new byte[100];//创建一个字节数组，大小自己要确定好
        DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);//将接收的数据存到字节数组中

        //3.调用receive()方法进行数据接收
        socket.receive(packet);
        System.out.println("接收完成！");
        System.out.println(new String(bytes, 0, bytes.length));//将接收的二进制数据，进行转换并打印到控制台显示
        //4.关闭资源
        socket.close();
    }
}
